#ifndef MELODYCANDIDATEFACTORY_H
#define MELODYCANDIDATEFACTORY_H

#include "CandidateFactory.h"
#include "Algorithms/MelodyCandidate.h"

class MelodyCandidateFactory : public CandidateFactory
{
public:
    MelodyCandidateFactory();
    std::vector<Candidate*> generateInitialPopulation(int populationSize,int genomeSize);
    std::vector<Candidate*> generateInitialPopulation(int populationSize,int genomeSize,std::vector<Candidate*> seedCandidates);
    std::vector<Candidate*> generateVariation(int populationSize,int genomeSize,Candidate* seedCandidate);
    void resetPopulation(std::vector<Candidate*> population,int genomeSize);
protected:
    void createRhythms(Candidate* candidate,int notes);
    void createPitches(Candidate* candidate,int notes);
    void createAmps(Candidate* candidate,int notes);
    void createLengths(Candidate* candidate,int notes);
    void createArg1(Candidate* candidate,int notes);
    void createArg2(Candidate* candidate,int notes);
};

#endif // MELODYCANDIDATEFACTORY_H
